package com.dragon.backstage.service;

import com.dragon.backstage.domain.param.role.RoleAddParam;
import com.dragon.backstage.domain.param.role.RoleAuthUserAddBatchParam;
import com.dragon.backstage.domain.param.role.RoleAuthUserDeleteBatchParam;
import com.dragon.backstage.domain.param.role.RoleAuthUserParam;
import com.dragon.backstage.domain.param.role.RoleChangeStatusParam;
import com.dragon.backstage.domain.param.role.RoleEditParam;
import com.dragon.backstage.domain.param.role.RoleParam;
import com.dragon.backstage.domain.vo.role.RoleDetailVo;
import com.dragon.backstage.domain.vo.role.RoleVo;
import com.dragon.backstage.domain.vo.user.UserVo;
import com.dragon.common.domain.vo.PaginationVo;
import com.dragon.common.utils.AjaxResult;
import com.dragon.interfaces.entity.Role;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * <p>
 * 角色信息表 服务类
 * </p>
 *
 * @author dragon
 * @since 2024-08-01 18:05:42
 */
public interface RoleService extends IService<Role> {

    /**
     * 角色列表
     *
     * @param param 角色搜索请求参数
     * @return 角色列表
     */
    AjaxResult<PaginationVo<RoleVo>> roleList(RoleParam param);

    /**
     * 角色详情
     *
     * @param roleId 角色ID
     * @return 角色详情
     */
    AjaxResult<RoleDetailVo> roleDetail(Long roleId);

    /**
     * 添加角色
     *
     * @param param 添加角色请求参数
     * @return 添加结果
     */
    AjaxResult<Void> addRole(RoleAddParam param);

    /**
     * 编辑角色
     *
     * @param param 编辑角色请求参数
     * @return 编辑结果
     */
    AjaxResult<Void> editRole(RoleEditParam param);

    /**
     * 删除角色
     *
     * @param roleId 角色ID
     * @return 删除结果
     */
    AjaxResult<Void> deleteRole(Long roleId);

    /**
     * 更改角色状态
     *
     * @param param 请求参数
     * @return 更改结果
     */
    AjaxResult<Void> changeStatus(RoleChangeStatusParam param);

    /**
     * 获取角色授权用户列表
     *
     * @param param 请求参数
     * @return 角色授权用户列表
     */
    AjaxResult<PaginationVo<UserVo>> authUserList(RoleAuthUserParam param);

    /**
     * 获取允许角色授权用户列表
     *
     * @param param 请求参数
     * @return 允许角色授权用户列表
     */
    AjaxResult<PaginationVo<UserVo>> allowAuthUserList(RoleAuthUserParam param);

    /**
     * 批量添加授权用户
     *
     * @param param 请求参数
     * @return 批量添加结果
     */
    AjaxResult<Void> addAuthUserBatch(RoleAuthUserAddBatchParam param);

    /**
     * 批量删除授权用户
     *
     * @param param 请求参数
     * @return 批量删除结果
     */
    AjaxResult<Void> deleteAuthUserBatch(RoleAuthUserDeleteBatchParam param);

}
